package org.yh.algorithm;

/**
 * @Author: yh
 * @Description:选择排序
 * @Date: Created in 15:24 2019/5/22
 * @Modified By:
 */
public class SelectionSort {

    // 选择排序（Selection sort）是一种简单直观的排序算法。
    // 它的工作原理是每一次从待排序的数据元素中选出最小（或最大）的一个元素，存放在序列的起始位置，然后，再从剩余未排序元素中继续寻找最小（大）元素，然后放到已排序序列的末尾。
    // 以此类推，直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
    public void SelectionSort(int arr[]) {
        if (arr.length == 0 || arr == null) {
            return;
        }
        //思路：获取最小的数，放在最前面
        int minIndex = 0;
        int temp = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[minIndex] > arr[j]) {
                    //获取到最小值的下标
                    minIndex = j;
                }
            }
            //交换位置
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
        for (int x : arr) {
            System.out.print(x + " ");
        }
    }

    public static void main(String[] args) {
        SelectionSort selectionSort = new SelectionSort();
        int arr[] = {1, 34, 45, 2, 4, 56, 2, 21, 0};
        selectionSort.SelectionSort(arr);
    }
}
